home *** CD-ROM | disk | FTP | other *** search
/ Java Programmer's Toolkit / Java Programmer's Toolkit.iso / gs3.53 / traceop.ps < prev    next >
Text File  |  1996-01-10  |  3KB  |  80 lines

  1. %    Copyright (C) 1992, 1993, 1994 Aladdin Enterprises.  All rights reserved.
  2. % This file is part of Aladdin Ghostscript.
  3. % Aladdin Ghostscript is distributed with NO WARRANTY OF ANY KIND.  No author
  4. % or distributor accepts any responsibility for the consequences of using it,
  5. % or for whether it serves any particular purpose or works at all, unless he
  6. % or she says so in writing.  Refer to the Aladdin Ghostscript Free Public
  7. % License (the "License") for full details.
  8. % Every copy of Aladdin Ghostscript must include a copy of the License,
  9. % normally in a plain ASCII text file named PUBLIC.  The License grants you
  10. % the right to copy, modify and redistribute Aladdin Ghostscript, but only
  11. % under certain conditions described in the License.  Among other things, the
  12. % License requires that the copyright notice and this notice be preserved on
  13. % all copies.
  14.  
  15. % Trace individual operators or procedures.
  16. % <opref> is <opname> or <opname> <dict>
  17. %    (dict defaults to dict where op is currently defined, if writable;
  18. %    otherwise uses userdict)
  19. % <opref> traceop prints vmem usage before;
  20. % <opref> <numargs|preproc> prints arguments or runs proc before;
  21. % <opref> <numargs|preproc> <numresults|postproc>
  22. %    also prints results or runs proc after.
  23. % If traceflush is true, flush the output after each printout.
  24. /traceflush true def
  25.  
  26. currentpacking true setpacking
  27. .currentglobal true .setglobal
  28.  
  29. % Define the default "before" action
  30. /tracebefore { vmstatus 3 traceprint pop pop pop } def
  31.  
  32. % Define the default "after" action
  33. /traceafter { } def
  34.  
  35. /traceprint
  36.  { dup type /integertype eq
  37.     { 1 sub -1 0 { ( ) print index ==only } for }
  38.     { exec }
  39.    ifelse
  40.  } bind def
  41. /traceend
  42.  { traceflush { flush } if
  43.  } bind def
  44. /traceop
  45.  { userdict begin
  46.    dup type dup /nametype eq exch /dicttype eq or { { tracebefore } } if
  47.    1 index type dup /nametype eq exch /dicttype eq or { { traceafter } } if
  48.    /.tpost exch def /.tpre exch def
  49.    dup type /dicttype ne
  50.     { dup where not { userdict 1 index {} put userdict } if
  51.     } if
  52.    dup dup wcheck not
  53.     { (Warning: substituting userdict for non-writable dictionary.\n) print
  54.       pop userdict
  55.     } if
  56.    /.tddict exch def   /.tdict exch def   /.tname exch cvlit def
  57.    [ .tname /=only cvx ( ) /print cvx
  58.      /.tpre load /traceprint cvx /traceend cvx
  59.      .tdict .tname get
  60.      dup xcheck
  61.       { dup type dup /arraytype eq exch /packedarraytype eq or
  62.          { /exec cvx
  63.      } if
  64.       } if
  65.      /.tpost load /traceprint cvx (\n) /print cvx /traceend cvx
  66.    ] cvx
  67.    .tdict .tname get type /operatortype eq
  68.     { .tname exch .makeoperator
  69.     } if
  70.    .tddict exch .tname exch put end
  71.  } bind def
  72. /tracebind /bind load def    % in case someone wants to put it back
  73. /bind { } def        % disable
  74.  
  75. .setglobal
  76. setpacking
  77.